<?php

namespace app\admin\controller;

use think\Controller;
use think\Db;

class Test extends Controller
{
    public function index()
    {
//        快捷查询
        $row = Db::name('user')
//            ->where('id', '=', 5)
            ->where('id', 5)
            ->find();

        $row = Db::name('user')
            ->where('age', '<', 18)
            ->select();

        $row = Db::name('user')
            ->where('id', 'in', [1, 3, 5, 7, 8, 999])
            ->select();

        $row = Db::name('user')
            ->where('age', '>', 18)
            ->where('name', 'like', '%王%')
            ->select();

        $row = Db::name('user')
            ->where(['sex' => '0'])
            ->whereOr(['province' => '上海'])
            ->select();

//        批量查询
        $row = Db::name('user')
            ->where([
                'id' => ['between', '10,20'],
                'sex' => ['eq', '0'],
            ])
            ->select();

        $row = Db::name('user')
            ->where('sex', 0)
            ->where('id', ['between', '1,3'], ['in', [6, 66, 666, 666, 6666]], 'or')
            ->select();

//        区间查询
        $row = Db::name('user')
            ->where('id', ['>', 3], ['<', 12])
            ->select();

//        多表查询
//            1). 手动多表
        $row = Db::field('u.name un, l.name ln')
            ->table(['hc_user' => 'u', 'hc_lover' => 'l'])
            ->where('u.id = l.user_id')
            ->select();

        /*
         *  SELECT  ***
         *  FROM  T1, T1...
         *  WHERE X=Y
         * */

//            2). JOIN
        $row = Db::table('hc_user')
            ->alias('u')
            ->field(['u.name' => 'un', 'l.name' => 'ln'])
            ->join('hc_lover l', 'u.id = l.user_id')
            ->order('un')
            ->select();


//            3). 视图
        $row = Db::view('hc_user', ['name' => 'uname', 'sex' => 'usex'])
            ->view('hc_lover', ['name' => 'lname', 'sex' => 'lsex'], 'hc_user.id = hc_lover.user_id')
            ->select();

//
//        聚合查询
        $row = Db::table('hc_user')->avg('age');

        $row = Db::table('hc_user')
            ->field(['province', 'count(id)' => 'counts'])
            ->group('province')
            ->select();

        $row = Db::table('hc_user')
            ->field(['province', 'group_concat(name)' => 'gn'])
            ->group('province')
            ->select();

//        子查询
        // 1.fetchSql() 方式
        // 1) 构建子查询SQL
        $query = Db::table('hc_user')
            ->field(['id', 'name', 'sex', 'age'])
            ->where('sex', 0)
            ->fetchSql(true)
            ->select();
//            var_dump($query); // 直接返回SQL, 不执行
        // 2) 组装完整的SQL 去执行
        $row = Db::table('(' . $query . ') u')
            ->where('u.age', 'gt', 18)
            ->order('id', 'DESC')
            ->select();

        // 2.buildSql() 方式
        // 1) 构建子查询SQL
        $query = Db::table('hc_user')
            ->field(['id', 'name', 'sex', 'age'])
            ->where('sex', 1)
            ->buildSql();
        var_dump($query);
        // 2) 组装完整的SQL 去执行
        $row = Db::table($query . ' u')
            ->where('u.age', 'gt', 18)
            ->order('id', 'DESC')
            ->select();
        var_dump($row);
    }


    // 事务
    public function sw()
    {
//        // 自动处理
//        Db::transaction(function () {
//            $userData = ['name' => '春春', 'age' => '81', 'sex' => 2];
//            $id = Db::table('user')->insertGetId($userData);
//            var_dump('用户的ID: ' . $id);
//            $loverData = ['name' => '随便', 'sex' => 2, 'user_id' => $id];
//            Db::table('lover')->insertGetId($loverData);
//
//            echo '牵手成功!';
//        });

        //  手动启动事务
        Db::startTrans();
        try{
            $userData = ['name' => '春春2号', 'age' => '80', 'sex' => 1];
            $id = Db::table('user')->insertGetId($userData);
            var_dump('用户的ID: ' . $id);
            $loverData = ['name' => '随便2号', 'sex' => 0, 'user_id' => $id];
            Db::table('lover')->insertGetId($loverData);

            echo '牵手成功!';
            // 提交事务
            Db::commit();
        } catch (\Exception $e) {
            echo '24个灯  全灭了...';
            // 回滚事务
            Db::rollback();
        }
    }


}
